本文介绍了如何使用GitHub Actions实现Hexo自动化部署,并指出了一些现有YAML代码所引用的脚本比较老导致报错的问题。
Hexo是一个快速、简单且强大的静态博客框架,而GitHub Actions则是一项功能强大的CI/CD工具,可以自动化地执行软件开发工作流程,用于自动构建、测试和部署代码,从而加快软件开发周期。
GitHub Actions使用YAML脚本语言,一种轻量级的标记语言,语法简单,相比JSON更加简介,可以轻松地编写和维护自动化工作流程。
1. SSH秘钥
我的Hexo分2个Git仓库,源码为私库 21ido.com,发布到 GitHub Pages为公开库 think2cat.github.io
因为是从源码私库push到Pages公开库,此时需要在公开库设置公钥
1.1 生成秘钥
执行下面代码,其中邮箱替换成自己的
ssh-keygen -t rsa -b 4096 -C "gavin2026@xxx.com" -f hexo -N ""
生成2个文件,hexo 和 hexo.pub
1.2 设置公钥
用记事本打开 hexo.pub,全选复制后到GitHub Pages库
Settings > Deploy keys > Add deploy key
把刚刚复制的粘贴进去,Title可以随便起,有多个公钥时可以区分,只有一个的话就无所谓了
然后记得把下面的 Allow write access勾上
1.3 设置私钥
接着记事本打开hexo,全选复制,私钥会长很多,到源码库
Settings > Secrets > Actions > New repository secret
Name相当于变量名,可以自己起个名字,但要跟后面的yaml文件对应,系统默认大写,就算输入小写也会自动变成大写
确定后这步就完成了,等于从源码库push到页面库时,公钥和私钥作为检验权限使用,而把私钥加在这里,是为了避免在源码写秘钥容易泄露,而且Actions的日志遇到 Secret 里的变量时,会自动处理成 ***,而不是明文,也能避免私钥泄露
2. 创建工作流
因为写hexo是push到源码库,然后由源码库编译生成pages,再把生成的页面push到Pages库,所以工作流是建在源码库
点击 Actions > New workflow
也可以直接在Git库根目录新建 .github \ workflows 目录,然后在 workflows 目录再新建 yml 文件,文件名随意,新建的工作流都会在Actions下显示
工作流分为几步骤
- checkout code
- 配置node环境
- 安装依赖包
- 安装hexo
- hexo生成页面
- 发布到GitHub Pages
完整的YML脚本如下
name: Deploy
on: [push]
jobs:
build:
runs-on: ubuntu-latest
name: Deploy blog
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16'
cache: 'npm'
- name: Install Dependencies
run: npm ci
- name: install hexo...
run: |
npm install hexo-cli -g
- name: hexo generate public files...
run: |
hexo clean
hexo g
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
external_repository: think2cat/think2cat.github.io
publish_branch: master
publish_dir: ./public
3. 报错解决
Please update the following actions to use Node.js 16
最开始用的是网上找的脚本 actions/checkout@v1 和 actions/setup-node@v2 版本为12,于是改为 actions/checkout@v3 和 actions/setup-node@v3,并配上 16 版本属性
Error: pngquant failed to build, make sure that libpng-dev is installed
使用部署脚本为 sma11black/hexo-action@v1.0.3 错误原因未知,可能是node版本兼容问题,改为全局安装 hexo + build
Please make sure you have the correct access rights and the repository exists. Error: Action failed with "The process '/usr/bin/git' failed with exit code 128"
Git库权限问题,确保SSH公钥和私钥是一对,且对应的库没搞错
脚本依赖包没有考虑做缓存,可以自己试试用 actions/cache
4. 附录:
阮一峰YAML教程 https://www.ruanyifeng.com/blog/2016/07/yaml.html
Github Actions https://docs.github.com/zh/actions/learn-github-actions/understanding-github-actions
actions-gh-pages https://github.com/peaceiris/actions-gh-pages